home *** CD-ROM | disk | FTP | other *** search
- {$A+,B-,C+,D+,E-,F-,G+,H+,I+,J+,K-,L+,M-,N+,O+,P+,Q-,R-,S-,T-,U-,V+,W-,X+,Y+,Z1}
-
- {$MINSTACKSIZE $00004000}
-
- {$MAXSTACKSIZE $00100000}
-
- {$IMAGEBASE $00400000}
-
- {$APPTYPE GUI}
-
- unit Demo1A;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- ComCtrls, StdCtrls, usXMLDoc, DBTables;
-
- type
- TfrmMain = class(TForm)
- PageControl1: TPageControl;
- TabSheet1: TTabSheet;
- TabSheet2: TTabSheet;
- btnParse: TButton;
- tvDocument: TTreeView;
- Label1: TLabel;
- memSML: TMemo;
- Button1: TButton;
- memOutput: TMemo;
- dbSample: TDatabase;
- procedure btnParseClick(Sender: TObject);
- procedure Button1Click(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- private
- protected
- procedure AddElement(aNode: TTreeNode; aElement: TusXMLElement);
- procedure FillTreeViewFromDocument(aDocument: TusXMLDocument);
- function ResolveSML(aSML: string): string;
- public
- end;
-
- var
- frmMain: TfrmMain;
-
- implementation
-
- uses mleTagResolvers;
-
- {$R *.DFM}
-
- procedure TfrmMain.btnParseClick(Sender: TObject);
- begin
- with TusXMLParser.Create do
- try
- LoadXML('<SML>' + memSML.Lines.Text + '</SML>');
- FillTreeViewFromDocument(Document);
- finally
- Free;
- end;
- end;
-
- procedure TfrmMain.AddElement(aNode: TTreeNode; aElement: TusXMLElement);
- var
- I: Integer;
- Node: TTreeNode;
- AttrNode: TTreeNode;
- begin
- with tvDocument.Items do
- begin
- Node := AddChild(aNode, Format('<%s>', [aElement.TagName]));
-
- AttrNode := AddChild(Node, 'Attributes');
- with aElement.Attributes do
- for I := 0 to Count - 1 do
- AddChild(AttrNode, Format('%s = "%s"', [Items[I].Name, Items[I].Value]));
-
- if aElement.Data = '' then
- AddChild(Node, 'Data: (none)')
- else
- AddChild(Node, Format('Data: "%s"', [aElement.Data]));
-
- with aElement.Subtags do
- for I := 0 to Count - 1 do
- AddElement(Node, Items[I]);
- end;
- end;
-
- procedure TfrmMain.FillTreeViewFromDocument(aDocument: TusXMLDocument);
- var
- I: Integer;
- begin
- with aDocument do
- begin
- tvDocument.Items.Clear;
- for I := 0 to Count - 1 do
- AddElement(nil, Items[I]);
- with tvDocument do
- begin
- TopItem := Items[0];
- TopItem.Expand(False);
- end;
- end;
- end;
-
- procedure TfrmMain.Button1Click(Sender: TObject);
- begin
- memOutput.Lines.Text := ResolveSML(memSML.Text);
- end;
-
- function TfrmMain.ResolveSML(aSML: string): string;
- begin
- with TusXMLParser.Create do
- try
- LoadXML('<SML>' + aSML + '</SML>');
- ObjectCache.Clear;
- with TSMLTagResolver.Create(nil, Document.Root) do
- try
- Setup;
- Resolve;
- Result := GetHTML;
- finally
- Free;
- end;
- finally
- Free;
- end;
- end;
-
- procedure TfrmMain.FormCreate(Sender: TObject);
- begin
- mleTagResolvers.MLEDatabase := dbSample;
- end;
-
- end.
-